<?php
if(!defined('BASE_DIR'))die('Cannot access the file !');
/**
 * -+-----------------------------------------
 * |PHP Framework
 * |Copyright (c) 2010 jinke.[iblue.cc]
 * |E-mail: mejinke@gmail.com
 * |Date:  2010-06-18
 * -+-----------------------------------------
 *
 * widget 物件基础类
 * @author jinke
 */
abstract class Widget
{

	public function __construct()
	{
		Debug::initClass('widget.class.php');
	}
	/**
	 * 设置必要的数据
	 * @access public
	 * @param array $data 数组形式的数据
	 */
	abstract public function render($data);

	/**
	 * 渲染模板输出物件内容
	 * @access protected
	 * @param string	$tpl_file	 物件模板名称
	 * @param array	$data	数组形式的数据
	 */
	protected function show($tpl_file = '',$data = array())
	{
		//获取当前子类名称
		$name = get_class($this);
		
		//设置widget模板路径
		$name =	empty($tpl_file) ? $name : $tpl_file ;
		$tpl_file = APP_DIR.'widget/'.$name.'.html';

		//如果不存在则设置路径为设系统内置Widget
		if(!is_file($tpl_file))
			$tpl_file = SYSTEM_DIR.'widget/'.$name.'.html';

		//如果系统文件不存在则返回
		if(!is_file($tpl_file))
			return;

		//设置编译目录
		$dir = TEMP_DIR.'/compile/'.APP_NAME.'/widget/';

		$compile_file = $dir.$name.ucfirst($data['ename']).'.php';
		Files::mkdirs($dir);
			
		//编译文件
		if (!is_file($compile_file))
		{
			$template = Functions::REC('template');
			$template->compile_file = $compile_file;
			if (is_file($compile_file))
			{
				if (Config::get('compile') || Config::get('debug') || 
				(Config::get('step_debug') && isset($_GET['clear']) && $_GET['clear']=='true') )
					$template->compile($tpl_file);
			}
			else
				$template->compile($tpl_file);
		}

		//获取内容
		ob_start();
		extract($data);
		require_once $compile_file;
		$content = ob_get_contents();
		ob_end_clean();
		
		return $content;

	}
}
?>